home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / icons+tools / iconian / sources / emodules / mod / rexx.e < prev    next >
Text File  |  1995-12-22  |  3KB  |  105 lines

  1. OPT MODULE
  2.  
  3. MODULE 'rexxsyslib','rexx/rexxio','rexx/rxslib','rexx/errors','rexx/storage'
  4. MODULE 'exec/ports','exec/nodes'
  5.  
  6. EXPORT ENUM RXTYPE_ERROR=0,RXTYPE_NOMSG,RXTYPE_MSG,RXTYPE_REPLY
  7. EXPORT OBJECT rexx_handle
  8.     rexxmsg:PTR TO rexxmsg
  9.     rexxargs:PTR TO CHAR
  10.     command:PTR TO CHAR
  11.     cmdline:PTR TO CHAR
  12.     result1:LONG
  13.     result2:LONG
  14.     replyport:PTR TO mp
  15. ENDOBJECT
  16. EXPORT DEF unconfirmed
  17.  
  18. EXPORT PROC handleRexxMsg(hostport)
  19.     DEF rexxmsg:PTR TO rexxmsg
  20.     DEF msgnode:PTR TO mn
  21.     DEF listnode:PTR TO ln
  22.     DEF rexxargs:PTR TO LONG
  23.     DEF command:PTR TO CHAR
  24.     DEF handle:PTR TO rexx_handle
  25.     DEF result1,result2
  26.  
  27.     rexxmsg:=GetMsg(hostport)
  28.     IF (rexxmsg)
  29.         msgnode:=rexxmsg.mn
  30.         listnode:=msgnode.ln
  31.         rexxargs:=rexxmsg.args
  32.         IF (listnode.type=NT_REPLYMSG)
  33.             IF (rexxargs[15]) THEN ReplyMsg(rexxargs[15])
  34.             IF (rexxargs[0]) THEN DeleteArgstring(rexxargs[0])
  35.             result1:=rexxmsg.result1
  36.             result2:=rexxmsg.result2
  37.             DeleteRexxMsg(rexxmsg)
  38.             DEC unconfirmed
  39.             RETURN result1,RXTYPE_REPLY,result2
  40.         ELSE
  41.             NEW handle
  42. ->            handle.command:=String(150)
  43. ->            handle.cmdline:=String(2000)
  44.             handle.rexxargs:=rexxargs[0]
  45.             handle.result1:=0
  46.             handle.result2:=0
  47.             handle.rexxmsg:=rexxmsg
  48.             handle.replyport:=hostport
  49. ->            StrCopy(handle.command,TrimStr(rexxargs[0]))
  50.             RETURN handle,RXTYPE_MSG
  51.         ENDIF
  52.     ELSE
  53.         RETURN 0,RXTYPE_NOMSG
  54.     ENDIF
  55. ENDPROC 0,RXTYPE_ERROR
  56.  
  57. EXPORT PROC forwardRexxMsg(handle:PTR TO rexx_handle)
  58.     DEF rexxargs:PTR TO LONG
  59.     rexxargs:=handle.rexxmsg.args
  60.     IF sendRexxMsg('REXX',rexxargs[0],handle.rexxmsg,0,handle.replyport)=NIL
  61.         xReplyRexxCmd(handle.rexxmsg,RC_FATAL,NIL)
  62.         ReplyMsg(handle.rexxmsg)
  63.     ENDIF
  64.     END handle
  65. ENDPROC
  66.  
  67. EXPORT PROC replyRexxMsg(handle:PTR TO rexx_handle,res1=0,res2=0)
  68.     xReplyRexxCmd(handle.rexxmsg,res1,res2)
  69.     ReplyMsg(handle.rexxmsg)
  70.     END handle
  71. ENDPROC
  72.  
  73. PROC xReplyRexxCmd(rexxmsg:PTR TO rexxmsg,returncode,returnstring)
  74.     rexxmsg.result1:=returncode
  75.     rexxmsg.result2:=IF ((rexxmsg.action AND RXFF_RESULT) AND (returnstring<>NIL) AND (returncode=0)) THEN CreateArgstring(returnstring,StrLen(returnstring)) ELSE NIL
  76. ENDPROC
  77.  
  78. EXPORT PROC sendRexxMsg(hostname,command,unknownmsg,flags,replyport:PTR TO mp,addressname=0,extname=0)
  79.     DEF arexxport=NIL:PTR TO mp
  80.     DEF rexxmsg=NIL:PTR TO rexxmsg
  81.     DEF rexxargs:PTR TO LONG
  82.     DEF listnode=NIL:PTR TO ln
  83.     DEF temp=NIL
  84.     IF replyport=NIL THEN RETURN NIL
  85.     listnode:=replyport.ln
  86.     IF (rexxmsg:=CreateRexxMsg(replyport,'rexx',listnode.name))=NIL THEN RETURN NIL
  87.     rexxargs:=rexxmsg.args
  88.     IF addressname THEN rexxmsg.commaddr:=addressname
  89.     IF extname THEN rexxmsg.fileext:=extname
  90.     IF temp:=CreateArgstring(command,StrLen(command))
  91.         rexxargs[0]:=temp
  92.         rexxmsg.action:=RXCOMM OR flags
  93.         rexxargs[15]:=unknownmsg
  94.         Forbid()
  95.         IF (arexxport:=FindPort(hostname)) THEN PutMsg(arexxport,rexxmsg)
  96.         Permit()
  97.         IF arexxport
  98.             INC unconfirmed
  99.             RETURN rexxmsg
  100.         ENDIF
  101.     ENDIF
  102.     IF temp THEN DeleteArgstring(temp)
  103.     IF rexxmsg THEN DeleteRexxMsg(rexxmsg)
  104. ENDPROC 0
  105.